#!/bin/bash

HOW=$1
PREFIX=$2
WHAT=$3
PATCHES=$4
CFGPARAMS=$5
VERBOSE=$6
SRCDIR=$7
MKPARAMS=
PATCHAFTERCFG=0

if test "$HOW" = "m" -o "$HOW" = "mmi" ; then
	MKPARAMS=$CFGPARAMS
fi

PATCHAFTERCFG=0
if test "${PATCHES:0:1}" = "@" ; then
	PATCHAFTERCFG=1
	PATCHES=${PATCHES:1}
fi 

if test "$SRCDIR" = "" ; then
	SRCDIR=src/$WHAT
fi

cd $SRCDIR

if test "$?" != "0" ; then
	exit 1
fi

export BINARY_PATH=$PREFIX/bin
export INCLUDE_PATH=$PREFIX/include
export LIBRARY_PATH=$PREFIX/lib

if test "$PATCHAFTERCFG" != "1" ; then
	for p in $PATCHES; do
		case "$p" in
			(*"/"*) patch -p1 -f --fuzz=0 <$p ;;
			(*) patch -p1 -f --fuzz=0 <../../patches/$p ;;
		esac
	done
fi

if test "${HOW:0:1}" = "r" ; then
	echo " * Running autoreconf for '$WHAT'..."

	HOW=${HOW:1}
	if test "$VERBOSE" != "1" ; then
		autoreconf --force --install >/dev/null

	else
		autoreconf --force --install
	fi

	if test "$?" != "0" ; then
		exit 1
	fi
fi

if test "${HOW:0:1}" = "a" ; then
	AUTOGENSH=
	if test -f "./autogen.sh" ; then
		AUTOGENSH="./autogen.sh"
		AUTOGENPARAMS="$CFGPARAMS --prefix=$PREFIX"
	else
		AUTOGENSH="autoreconf -fi"
		AUTOGENPARAMS=
	fi

	echo " * Running $AUTOGENSH for '$WHAT'..."

	HOW=${HOW:1}
	if test "$CFGPARAMS" != "" -a "${CFGPARAMS%%^}" != "" -a "${CFGPARAMS%%^}" != "$CFGPARAMS" ; then
		AUTOGENPARAMS="${CFGPARAMS%%^}"
		CFGPARAMS="${CFGPARAMS##*^}"
	fi
	if test "$VERBOSE" != "1" ; then
		$AUTOGENSH $AUTOGENPARAMS >/dev/null
	else
		$AUTOGENSH $AUTOGENPARAMS 
	fi

	if test "$?" != "0" ; then
		exit 1
	fi
fi

if test "$HOW" = "cmmi" ; then
	echo " * Configuring '$WHAT'..."

	make clean &>/dev/null

	FIRSTPARAM=${CFGPARAMS%% }
	if test "$FIRSTPARAM" != "" -a "${FIRSTPARAM%%/}" != "" -a "${FIRSTPARAM%%/}" != "$FIRSTPARAM" ; then
		if test "$VERBOSE" != "1" ; then
			$CFGPARAMS --prefix=$PREFIX  >/dev/null

		else
			$CFGPARAMS --prefix=$PREFIX
		fi
	elif test "$VERBOSE" != "1" ; then
		./configure --prefix=$PREFIX $CFGPARAMS >/dev/null

	else
		./configure --prefix=$PREFIX $CFGPARAMS
	fi

	if test "$?" != "0" ; then
		exit 1
	fi
fi

if test "$PATCHAFTERCFG" = "1" ; then
	for p in $PATCHES; do
		case "$p" in
			(*"/"*) patch -p1 -f --fuzz=0 <$p ;;
			(*) patch -p1 -f --fuzz=0 <../../patches/$p ;;
		esac
	done
fi

if test "$VERBOSE" != "1" ; then
	echo " * Building '$WHAT'..." && \
	make $MKPARAMS >/dev/null && \
	if test "$HOW" != "m" ; then
		make install $MKPARAMS >/dev/null
	fi
else
	echo " * Building '$WHAT'..." && \
	make V=1 $MKPARAMS && \
	if test "$HOW" != "m" ; then
		make install V=1 $MKPARAMS
	fi
fi

if test "$?" != "0" ; then
	exit 1
fi
